package com.soosync.common;

/** JDK API */
import java.security.MessageDigest;

import org.apache.commons.lang.StringUtils;

import sun.misc.BASE64Encoder;

/** 
 * ���ڿ� �����Ϳ� ���� ��ƿ��Ƽ org.apache.commons.lang.StringUtils�� ����Ŭ���� �Ѵ�. �ڼ��� ������
 * http://www.apache.org�� commons�� �����Ѵ�.
 * 
 * @author ���¿�
 * @version 1.0
 */
public class StringUtil extends StringUtils {

	/**
	 * �˻������ String�迭���� ������ ���� ���� ��ü�� ���� ���θ� �Ǵ��Ѵ�.
	 * 
	 * @param p_arr
	 *            �˻���� String �迭
	 * @param p_val
	 *            ã���� �ϴ� ���ڿ� ��ü
	 * @return �˻����迭�� Null�̰ų� ���� ���� �˻���� ���� ��� false �˻���� ������ true ��ȯ�Ѵ�.
	 */
	public static boolean searchString(String p_val, String[] p_arr) {
		if (p_arr == null || p_arr.length == 0)
			return false;
		for (int i = 0; i < p_arr.length; i++) {
			if (p_val.equals(p_arr[i])) {
				return true;
			}
		}

		return false;
	}

	/**
	 * ���ڿ�(��й�ȣ)�� MD5 �˰?������ ��ȣȭ �Ѵ�.
	 * 
	 * @param p_string
	 *            ��ȣȭ �� ���ڿ�
	 * @return ��ȣȭ �� ���ڿ�
	 */
	public static String encrypt(String p_string) throws BaseException {
		try {
			if (p_string == null)
				p_string = "";
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.reset();
			md.update(p_string.getBytes());
			byte[] hash = md.digest();
			StringBuffer sb = new StringBuffer("");
			for (int i = 0; i < hash.length; i++) {
				int v = hash[i] & 0xFF;
				if (v < 16)
					sb.append("0");
				sb.append(Integer.toString(v, 16));
			}
			BASE64Encoder encoder = new BASE64Encoder();
			return encoder.encode(sb.toString().getBytes());
		} catch (Exception e) {
			throw new LgtFException(e.getMessage(), e);
		}
	}

	/**
	 * ���� ������� ���� ���ε� ������ ������ ���� ���ڿ��� ��´�.
	 * 
	 * @param p_string
	 *            ����
	 * @param p_bind
	 *            ���ε�� �迭
	 * @return ���ε���� ���Ե� ����
	 */
	public static String replaceBind(String p_string, Object[] p_bind) {
		String query = p_string;
		StringBuffer sb = new StringBuffer(System.getProperty("line.separator"));
		if (p_bind != null) {
			int bindLength = p_bind.length;
			int queryLength = StringUtils.countMatches(query, "?");
			if (bindLength != queryLength) {
				System.out.println("p_bind.length : " + bindLength);
				System.out.println("query.length : " + queryLength);
				System.out.println("大概是参数没对上的意思吧!");
			}
		}
		int bidx = 0;
		int loc = -1;
		while ((loc = query.indexOf("?")) > -1) {
			sb.append(query.substring(0, loc));
			if (p_bind[bidx] == null) {
				sb.append(p_bind[bidx]);
			} else {
				if (p_bind[bidx].getClass().getName().equalsIgnoreCase(
						"java.lang.String")) {
					sb.append("'" + p_bind[bidx] + "'");
				} else {
					sb.append(p_bind[bidx]);
				}
			}

			if (loc < query.length()) {
				query = query.substring(loc + 1);
			}
			bidx++;
		}
		sb.append(query);
		return sb.toString();
	}

	/**
	 * EtsJDAO�� ����� ���� ���ڿ��� ġȯ�Ѵ�.
	 * 
	 * @param p_string
	 *            ġȯ�� ���ڿ�
	 * @param p_obj
	 *            ġȯ�� ������Ʈ �迭
	 * @return ġȯ�� ���ڿ�
	 */
	public static String replace(String p_string, Object[] p_obj) {
		// ġȯ�� ���ڿ��迭�� ������ ������� �����Ѵ�.
		if (p_obj == null)
			return p_string;
		String src = p_string;
		String rep = null;
		for (int i = 0; i < p_obj.length; i++) {
			rep = "{" + i + "}";
			if (p_obj == null) {
				// ġȯ�� ���ڿ��� Null�̸� �����̽��� ġȯ�Ѵ�.
				src = replace(src, rep, " ");
			} else {
				src = replace(src, rep, (String) p_obj[i]);
			}
		}
		return src;
	}

	/**
	 * ���ڿ��� Ư���� ����Ʈ���̸�ŭ �ڸ���. ������ ���ڰ� �ѱ��� ��� �� ���ڱ����� �ڸ���. �ַ� SMS�޼����� ���ϴµ� ����Ѵ�.
	 * 
	 * @param p_src
	 *            ���ڿ�
	 * @param p_len
	 *            �ڸ� ����
	 * @return p_len��Ŭ �߸� ���ڿ�
	 */
	public static String getCuttedString(String p_src, int p_len) {
		byte[] src = p_src.getBytes();

		if (src.length < p_len) {
			return new String(src);
		}

		byte[] result = new byte[p_len];
		System.arraycopy(src, 0, result, 0, p_len);
		String str = new String(result);
		if (str.length() == 0) {
			result = new byte[p_len - 1];
			System.arraycopy(src, 0, result, 0, p_len - 1);
			str = new String(result);
		}
		return str;
	}

	/**
	 * ù������ �ѱۿ��θ� Ȯ���Ѵ�.
	 * 
	 * @param p_string
	 *            �ѱ����� Ȯ���� ���ڿ�
	 * @return �ѱۿ���
	 */
	public static boolean isKorean(String p_string) {
		if (p_string == null || p_string.trim().equals(""))
			return false;
		return isKorean(p_string.charAt(0));
	}

	/**
	 * Character�� �ѱۿ��θ� Ȯ���Ѵ�.
	 * 
	 * @param p_char
	 *            �ѱ����� Ȯ���� ����
	 * @return �ѱۿ���
	 */
	public static boolean isKorean(char p_char) {
		return (p_char >= 0xAC00 && p_char <= 0xD7A3) ? true : false;
	}

	public static boolean isNull(String p_value) {
		if (p_value == null || p_value.trim().length() == 0
				|| p_value.trim().equals("")
				|| p_value.trim().equalsIgnoreCase("null"))
			return true;
		else
			return false;
	}

	public static boolean isNotNull(String p_value) {
		if (p_value == null || p_value.trim().length() == 0
				|| p_value.trim().equals("")
				|| p_value.trim().equalsIgnoreCase("null"))
			return false;
		else
			return true;
	}

	public static String replaceToXmlString(String p_inputString) {
		p_inputString = new String(p_inputString.replaceAll("<", "&lt;"));
		p_inputString = new String(p_inputString.replaceAll(">", "&gt;"));
		return p_inputString;
	}

	public static String replaceFromXmlString(String p_inputString) {
		p_inputString = new String(p_inputString.replaceAll("&lt;", "<"));
		p_inputString = new String(p_inputString.replaceAll("&gt;", ">"));
		return p_inputString;
	}
}
